package skin.support.animator.activityAnimator;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.View;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.LinearInterpolator;
import skin.support.animator.Action;
import skin.support.animator.SkinAnimator;
/**
* Created by erfli on 2/25/17.
*/
public class SkinRotateHintAnimator implements SkinAnimator {
protected ObjectAnimator preAnimator;
protected ObjectAnimator middleAnimator;
protected ObjectAnimator afterAnimator;
protected View targetView;
private SkinRotateHintAnimator() {
}
public static SkinRotateHintAnimator getInstance() {
SkinRotateHintAnimator skinAlphaAnimator = new SkinRotateHintAnimator();
return skinAlphaAnimator;
}
@Override
public SkinAnimator apply(@NonNull View view, @Nullable final Action action) {
this.targetView = view;
int middle = 30;
int range = 15;
targetView.setPivotX(targetView.getLeft());
targetView.setPivotY(targetView.getTop());
preAnimator = ObjectAnimator.ofPropertyValuesHolder(targetView,
PropertyValuesHolder.ofFloat("rotation",
0, middle - range, middle + range, middle - range, middle + range, middle - range, middle + range)
).setDuration(PRE_DURATION * 8);
preAnimator.setInterpolator(new LinearInterpolator());
preAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
middleAnimator.start();
}
});
middleAnimator = ObjectAnimator.ofPropertyValuesHolder(targetView,
PropertyValuesHolder.ofFloat("TranslationY", targetView.getTop(), targetView.getBottom()),
PropertyValuesHolder.ofFloat("alpha", 1, 0)
).setDuration(PRE_DURATION * 2);
middleAnimator.setInterpolator(new AccelerateInterpolator());
middleAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
if (action != null) {
action.action();
}
afterAnimator.start();
}
});
afterAnimator = ObjectAnimator.ofPropertyValuesHolder(targetView,
PropertyValuesHolder.ofFloat("rotation",
0, 0),
PropertyValuesHolder.ofFloat("alpha", 1, 1),
// PropertyValuesHolder.ofFloat("translationX",
// targetView.getLeft() - targetView.getWidth(), targetView.getLeft()),
PropertyValuesHolder.ofFloat("translationY",
targetView.getTop() - targetView.getHeight(), targetView.getTop())
).setDuration(AFTER_DURATION * 2);
afterAnimator.setInterpolator(new LinearInterpolator());
afterAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
targetView.setPivotX(targetView.getWidth() / 2);
targetView.setPivotY(targetView.getHeight() / 2);
}
});
return this;
}
@Override
public SkinAnimator setPreDuration() {
return this;
}
@Override
public SkinAnimator setAfterDuration() {
return this;
}
@Override
public SkinAnimator setDuration() {
return this;
}
@Override
public void start() {
preAnimator.start();
}
}